#include <REGX52.H>
/**
 * 灯一开始是常亮状态
 * 按一下变为闪烁。
 * 按一下熄灭。
 * 按一下常亮。
 * 三个状态切换
 *
 */

void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 123; j++)
            ;
    }
}

void main()
{
        unsigned char state = 0; // 0: 常亮, 1: 闪烁, 2: 熄灭

    // 初始化灯为常亮
    LED_B = 0;

    while (1) {
        if (KEY == 0) { // 检测按键按下
            delay_ms(10); // 消抖
            if (KEY == 0) {
                state = (state + 1) % 3; // 切换状态
                while (KEY == 0); // 等待按键释放
            }
        }

        switch (state) {
            case 0: // 常亮
                LED_B = 0;
                break;
            case 1: // 闪烁
                LED_B = ~LED_B;
                delay_ms(500); // 闪烁间隔
                break;
            case 2: // 熄灭
                LED_B = 1;
                break;
        }
    }
}